C11 এবং C17 হলো ANSI C বা Standard C এর নতুন সংস্করণ, যা ISO (International Organization for Standardization) দ্বারা প্রকাশিত হয়েছে। C11 সংস্করণটি ২০১১ সালে এবং C17 সংস্করণটি ২০১৭ সালে প্রকাশিত হয়েছে। C11 সংস্করণে বেশ কিছু নতুন বৈশিষ্ট্য যোগ করা হয়েছে এবং C17 সংস্করণে মূলত C11-এর বাগ ফিক্স করা হয়েছে।
C11 সংস্করণে কিছু গুরুত্বপূর্ণ নতুন বৈশিষ্ট্য যোগ করা হয়েছে, যা কোডিংকে আরও কার্যকর এবং নির্ভুল করেছে।
Atomics যোগ করার মাধ্যমে মাল্টিথ্রেডেড প্রোগ্রামিংয়ে নির্দিষ্ট ডেটার অ্যাক্সেসকে নিরাপদ করা হয়েছে। Atomics ব্যবহার করে কোনো ভেরিয়েবলে একাধিক থ্রেড একসাথে অ্যাক্সেস করতে পারে না, ফলে ডেটা রেস এড়ানো সম্ভব হয়।
উদাহরণ:
#include <stdatomic.h>
int main() {
atomic_int count = 0; // অ্যাটমিক ভেরিয়েবল ঘোষণা
atomic_fetch_add(&count, 1); // নিরাপদভাবে ভেরিয়েবল পরিবর্তন
return 0;
}
C11 সংস্করণে threads.h
হেডার ফাইলের মাধ্যমে থ্রেড ব্যবস্থাপনা সমর্থন করেছে। এটি থ্রেড তৈরি, থ্রেডের সাথে যোগাযোগ এবং থ্রেডের কার্যক্রম সমাপ্তি সহজ করে।
উদাহরণ:
#include <threads.h>
#include <stdio.h>
int my_thread(void *arg) {
printf("Hello from thread!\n");
return 0;
}
int main() {
thrd_t t;
thrd_create(&t, my_thread, NULL); // থ্রেড তৈরি করা
thrd_join(t, NULL); // থ্রেড সমাপ্তি পর্যন্ত অপেক্ষা করা
return 0;
}
C11-এ _Generic
কিওয়ার্ড যোগ করা হয়েছে, যা টাইপের উপর ভিত্তি করে ফাংশন বা এক্সপ্রেশন নির্বাচন করতে সাহায্য করে। এটি কোডকে আরও গতিশীল করে তোলে এবং টাইপ চেকিং সহজ করে।
উদাহরণ:
#include <stdio.h>
#define print_val(x) _Generic((x), \
int: print_int, \
double: print_double \
)(x)
void print_int(int i) {
printf("Integer: %d\n", i);
}
void print_double(double d) {
printf("Double: %f\n", d);
}
int main() {
print_val(5); // Integer ফাংশন কল করবে
print_val(5.5); // Double ফাংশন কল করবে
return 0;
}
static_assert
একটি কম্পাইল টাইম এসারশন তৈরি করতে ব্যবহৃত হয়। এটি প্রোগ্রামে নির্দিষ্ট কন্ডিশন মেনে চলা নিশ্চিত করতে ব্যবহৃত হয়, যা কম্পাইল টাইমে ত্রুটি চিহ্নিত করে।
উদাহরণ:
#include <assert.h>
int main() {
static_assert(sizeof(int) == 4, "int size is not 4 bytes");
return 0;
}
C11 এ Anonymous Structures এবং Unions যোগ করা হয়েছে, যা ডেটা স্ট্রাকচার ডিজাইনকে আরও সহজ করে।
উদাহরণ:
#include <stdio.h>
struct Point {
union {
struct {
int x, y;
};
int coords[2];
};
};
int main() {
struct Point p = {.x = 5, .y = 10};
printf("X: %d, Y: %d\n", p.x, p.y);
return 0;
}
C11-এ _Char16_t
, _Char32_t
এবং _Unicode
সাপোর্ট যোগ করা হয়েছে, যা ইউনিকোড ডেটা পরিচালনাকে আরও সহজ করেছে।
C17 সংস্করণটি নতুন কোনো উল্লেখযোগ্য বৈশিষ্ট্য যোগ করেনি; এটি মূলত C11 সংস্করণের বাগ ফিক্স এবং কিছু উন্নতি প্রদান করেছে। কিছু ক্ষেত্রে C11-এর নতুন বৈশিষ্ট্যগুলির স্থিতিশীলতা উন্নত করেছে।
১. বাগ ফিক্স: C11 সংস্করণের বিভিন্ন বাগ সংশোধন করা হয়েছে, যা নির্ভরযোগ্যতা এবং স্থিতিশীলতা উন্নত করেছে।
২. ISO মান অনুযায়ী সংশোধন: ISO C স্ট্যান্ডার্ডের সাথে সঙ্গতিপূর্ণ করার জন্য কিছু পরিবর্তন আনা হয়েছে।
৩. অপ্রয়োজনীয় বৈশিষ্ট্য সরানো: কিছু অপ্রয়োজনীয় বৈশিষ্ট্য এবং মাইনার আপডেট সরানো হয়েছে।
৪. উন্নত কম্পাইলার সমর্থন: C17 সংস্করণে বিভিন্ন কম্পাইলারের জন্য আরও ভালো সমর্থন যোগ করা হয়েছে।
১. মাল্টিথ্রেডিং সমর্থন: C11 থ্রেড এবং অ্যাটমিক অপারেশনের জন্য সমর্থন যোগ করেছে, যা মাল্টিপ্রসেসর সিস্টেমে প্রোগ্রামিংকে সহজ এবং কার্যকর করেছে।
২. টাইপ-সেফ প্রোগ্রামিং: _Generic
এবং static_assert
এর মাধ্যমে টাইপ-সেফ প্রোগ্রামিং আরও নির্ভুল এবং নির্ভরযোগ্য হয়েছে।
৩. Unicode এবং আন্তর্জাতিককরণ: ইউনিকোড সাপোর্টের মাধ্যমে বিভিন্ন ভাষায় প্রোগ্রামিং করা সহজ হয়েছে।
৪. নির্ভরযোগ্য প্রোগ্রামিং: C17 সংস্করণের বাগ ফিক্স এবং উন্নতির মাধ্যমে প্রোগ্রামিং আরও নির্ভরযোগ্য হয়েছে।
বৈশিষ্ট্য | C11 | C17 |
---|---|---|
Atomics | নতুনভাবে যোগ করা হয়েছে | বাগ ফিক্স |
Threads | threads.h এ থ্রেড সাপোর্ট | স্থিতিশীলতা উন্নত |
Generic Selections | _Generic যোগ | পূর্বের ফিচারগুলো উন্নত |
Static Assertions | static_assert যোগ | — |
Anonymous Structures | অনুমোদিত | — |
Unicode Support | উন্নত ইউনিকোড সাপোর্ট | — |
C11 এবং C17 সংস্করণগুলো C প্রোগ্রামিংয়ের কার্যকারিতা ও স্থিতিশীলতা আরও উন্নত করেছে। C11 মূলত নতুন বৈশিষ্ট্য যোগ করেছিল এবং C17 C11-এর বাগ ফিক্স ও স্থিতিশীলতার উন্নতি করেছে।
common.read_more